package com.huilian.tool.work.weixin.service;

import com.huilian.tool.work.weixin.dto.*;

import java.text.ParseException;
import java.util.List;

/**
 * 客户管理
 *
 * @Author 少凡
 * @Date 2022-06-27 11:50
 * version 1.0
 */
public interface ExternalContactService {

    /**
     * 获取配置了客户联系功能的成员列表
     *
     * @param accessToken
     * @return
     */
    String getFollowUserList(String accessToken);

    /**
     * 获取客户列表
     *
     * @param accessToken 调用接口凭证
     * @param userId      企业成员的userid
     * @return
     */
    String list(String accessToken, String userId);

    /**
     * 获取客户详情
     *
     * @param accessToken    调用接口凭证
     * @param externalUserId 外部联系人的userid，注意不是企业成员的帐号
     * @return
     */
    String get(String accessToken, String externalUserId, String cursor);

    /**
     * 批量获取客户详情
     *
     * @param userIdList 企业成员的UserId
     * @return
     */
    String batchGetByUser(String accessToken, List<String> userIdList);

    /**
     * 修改客户备注信息
     *
     * @param externalContact
     * @return
     */
    String remark(String accessToken, ExternalContact externalContact);

    /**
     * 获取客户群列表
     *
     * @param accessToken
     * @param limit
     * @return
     */
    String groupChatList(String accessToken, Integer limit);

    /**
     * 获取客户群详情
     *
     * @param accessToken
     * @param chatId
     * @param needName
     * @return
     */
    String getGroupChat(String accessToken, String chatId, Integer needName);

    /**
     * 配置客户联系「联系我」方式
     *
     * @param accessToken
     * @param contactWay
     * @return
     */
    String addContactWay(String accessToken, ContactWay contactWay);

    /**
     * 获取企业已配置的「联系我」方式
     *
     * @param configId
     * @return
     */
    String getContactWay(String accessToken, String configId);

    /**
     * 获取企业已配置的「联系我」列表
     *
     * @param startTime
     * @param endTime
     * @param cursor
     * @param limit
     * @return
     */
    String listContactWay(String accessToken, String startTime, String endTime, String cursor, Integer limit) throws ParseException;


    /**
     * 更新企业已配置的「联系我」方式
     *
     * @return
     */
    String updateContactWay(String accessToken, ContactWay contactWay);

    /**
     * 删除企业已配置的「联系我」方式
     *
     * @param configId
     * @return
     */
    String delContactWay(String accessToken, String configId);


    /**
     * 创建客户朋友圈发表任务
     *
     * @param accessToken
     * @param moment
     * @return
     */
    String addMomentTask(String accessToken, Moment moment);

    /**
     * 获取客户朋友圈任务创建结果
     *
     * @param accessToken
     * @param jobId
     * @return
     */
    String getMomentTaskResult(String accessToken, String jobId);

    /**
     * 获取企业全部的发表列表
     *
     * @param accessToken
     * @param startTime
     * @param endTime
     * @param creator
     * @param cursor
     * @param limit
     * @return
     * @throws ParseException
     */
    String getMomentList(String accessToken, String startTime, String endTime, String creator, String cursor, Integer limit) throws ParseException;

    /**
     * 获取客户朋友圈企业发表的列表
     *
     * @param accessToken
     * @param momentId
     * @param cursor
     * @param limit
     * @return
     */
    String getMomentTask(String accessToken, String momentId, String cursor, Integer limit);

    /**
     * 获取客户朋友圈发表时选择的可见范围
     *
     * @param accessToken
     * @param momentId
     * @param userId
     * @param cursor
     * @param limit
     * @return
     */
    String getMomentCustomerList(String accessToken, String momentId, String userId, String cursor, Integer limit);

    /**
     * 获取客户朋友圈发表后的可见客户列表
     *
     * @param accessToken
     * @param momentId
     * @param userId
     * @param cursor
     * @param limit
     * @return
     */
    String getMomentSendResult(String accessToken, String momentId, String userId, String cursor, Integer limit);

    /**
     * 获取客户朋友圈的互动数据
     *
     * @param accessToken
     * @param momentId
     * @param userId
     * @return
     */
    String getMomentComments(String accessToken, String momentId, String userId);

    /**
     * 创建企业群发
     *
     * @param accessToken
     * @param msgTemplate
     * @return
     */
    String addMsgTemplate(String accessToken, MsgTemplate msgTemplate);

    /**
     * 获取群发记录列表
     *
     * @param accessToken
     * @param queryParam
     * @return
     */
    String getGroupMsgListV2(String accessToken, QueryParamGroupMsg queryParam);

    /**
     * 获取群发成员发送任务列表
     *
     * @param accessToken
     * @param queryParam
     * @return
     */
    String getGroupMsgTask(String accessToken, QueryParamGroupMsg queryParam);


    /**
     * 获取企业群发成员执行结果
     *
     * @param accessToken
     * @param queryParam
     * @return
     */
    String getGroupMsgSendResult(String accessToken, QueryParamGroupMsg queryParam);

    /**
     * 发送新客户欢迎语
     *
     * @param accessToken
     * @param msgTemplate
     * @return
     */
    String sendWelcomeMsg(String accessToken, MsgTemplate msgTemplate);

    /**
     * 添加入群欢迎语素材
     *
     * @param accessToken
     * @param groupWelcome
     * @return
     */
    String groupWelcomeTemplateAdd(String accessToken, GroupWelcome groupWelcome);

    /**
     * 编辑入群欢迎语素材
     *
     * @param accessToken
     * @param attachment
     * @return
     */
    String groupWelcomeTemplateEdit(String accessToken, Attachment attachment);

    /**
     * 获取入群欢迎语素材
     *
     * @param accessToken
     * @param templateId
     * @return
     */
    String groupWelcomeTemplateGet(String accessToken, String templateId);

    /**
     * 删除入群欢迎语素材
     *
     * @param accessToken
     * @param templateId
     * @return
     */
    String groupWelcomeTemplateDel(String accessToken, String templateId);

    /**
     * 获取「联系客户统计」数据
     *
     * @param accessToken
     * @return
     */
    String getUserBehaviorData(String accessToken, QueryParamStats queryParamStats);

    String uploadimg(String accessToken, String url) throws Exception;

    /**
     * 获取「群聊数据统计」数据- 按群主聚合的方式
     *
     * @param accessToken
     * @return
     */
    String groupChatStatistic(String accessToken, QueryParamStats queryParamStats);

    /**
     * 获取「群聊数据统计」数据- 按自然日聚合的方式
     *
     * @param accessToken
     * @return
     */
    String groupChatStatisticGroupByDay(String accessToken, QueryParamStats queryParamStats);


    /**
     * @param groupWelcome
     * @return
     */
    String addGroupWelcomeTemplate(String accessToken, GroupWelcome groupWelcome);


    /**
     * @param groupWelcome
     * @return
     */
    String editGroupWelcomeTemplate(String accessToken, GroupWelcome groupWelcome);
}
